package com.lws.basic.utils.common;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;

import java.io.IOException;

/**
 * 利用相机与相册应用获取图片的工具类
 * 首先在Activity中执行takePhoto(int requestCode, Activity activity)和getPhoto(int requestCode,Activity activity)
 * 此时吊起相机应用,用户操作完成后,相机应用会把结果反馈回来
 * 在OnActivityResult方法中可以执行takePhotoSucess(Intent intent)和
 * getPhotoSucess(Intent intent,Activity activity)方法可以获得需要的图片对象
 */

public class CameraUtils {
    /**
     * @param requestCode  请求码
     * @param activity      发起请求的Activity(结果也会返回到这个Activity中
     * 请求相机应用拍照,并把拍好的照片通过onActivityResult方法中的Intent参数传回来
     */
    public static void takePhoto(int requestCode, Activity activity) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//实例化Intent对象,使用MediaStore的ACTION_IMAGE_CAPTURE常量调用系统相机
        activity.startActivityForResult(intent, requestCode);//开启相机，传入上面的Intent对象
    }

    /**
     * @return @return  转入相册拍摄图片的Intent
     */
    public static Intent takePhotointent() {
        return new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//实例化Intent对象,使用MediaStore的ACTION_IMAGE_CAPTURE常量调用系统相机
    }

    /**
     * @param intent   照相机应用反馈回来的Intent
     * @return  从Intent中提取到的图片对象
     */
    public static Bitmap takePhotoSucess(Intent intent) {
        Bundle extras=intent.getExtras();//从Intent中获取附加值
        return (Bitmap) extras.get("data");//从附加值中获取返回的图像
    }

    /**
     * @param requestCode 请求码
     * @param activity  发起请求的Activity(结果也会返回到这个Activity中
     *   请求相机应用打开相册,让用户选取图片,并把选取的照片通过onActivityResult方法中的Intent参数传回来
     */
    public static void getPhoto(int requestCode,Activity activity) {
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        Intent i = new Intent(Intent.ACTION_PICK, uri);
        activity.startActivityForResult(i, requestCode);
    }

    /**
     * @return  转入相册选取图片的Intent
     */
    public static Intent getPhotoIntent() {
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        return new Intent(Intent.ACTION_PICK, uri);
    }

    /**
     * @param intent    照相机应用反馈回来的Intent
     * @param activity  用这个Activity对象开启内容观察者
     * @return 从Intent中获得Uri后利用内容观察者获得图片对象
     */
    public static Bitmap getPhotoSucess(Intent intent,Activity activity) {
        ContentResolver resolver = activity.getContentResolver();
        //照片的原始资源地址
        if (intent ==null) {
            return null;
        }
        Uri originalUri = intent.getData();
        try {
            Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);
            return photo;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;//发生了异常
    }





}
